import java.util.Stack;

/**
 * @author : zzr
 * @description :括号匹配
 * 只要是左括号 就入栈
 * 遇到右括号 就开始匹配
 *     1.和栈顶不匹配
 *     2.栈为空 -- 右括号不匹配
 *     3.字符串遍历完了，栈不为空 -- 左括号不匹配
 * @date :
 */
public class Test3 {
    public boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();
        for(int i = 0; i < s.length(); i++) {
            char ch = s.charAt(i); //从字符串中得到括号
            if(ch =='(' || ch == '[' || ch == '{') {
                //将左括号入栈
                stack.push(ch);
            } else {
                //右括号
                if(stack.isEmpty()) {
                    return false;
                }
                char top = stack.peek();
                //此时top为最后一个左括号，ch为第一个右括号
                if(ch == ')' && top == '(' || ch == '}' && top == '{' || ch == ']' && top == '[') {
                    stack.pop();//匹配成功
                } else {
                    return false;
                }
            }
        }
        if(!stack.isEmpty()) {
            return false;
        }
        return true;
    }
}
